package com.zjsru.oneDay202206;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: likew
 * @Date: 2022/7/28
 *
 * 数组序号转换
 * 输入：arr = [40,10,20,30]
 * 输出：[4,1,2,3]
 * 解释：40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。
 *
 */
public class arrayRankTransform {
    /**
     * 思路是 ->用map记录数字和对应的位数,然后在原数组复现即可
     * */
    public int[] arrayRankTransform(int[] arr) {
        int[] copys = Arrays.copyOf(arr, arr.length);
        int[] ans = new int[arr.length];
        Arrays.sort(copys);
        int i = 1;
        Map<Integer,Integer> map = new HashMap<>();
        for (int num:copys) {
            if (!map.containsKey(num)){
                map.put(num,i);
                i ++;
            }
        }
        for (int j = 0; j < arr.length; j++ ) {
            ans[j] = map.get(arr[j]);
        }
        return ans;
    }
    
    public static void main(String[] args) {
        arrayRankTransform arrayRankTransform = new arrayRankTransform();
        int[] arr = new int[]{40,10,20,30};
        System.out.println(arrayRankTransform.arrayRankTransform(arr));
    }
}
